package org.langqiao.string;

import java.util.Scanner;

public class FormatString {

	public FormatString() {
		Scanner in = new Scanner(System.in);// 从键盘读取输入的字符串
		System.out.println("请输入字符串：");
		String str = in.nextLine().trim();// 去掉开头的空格
		// String []strArray = str.split("\\p{Blank}+");
		String[] strArray = str.split("\\s+");// 这两种正则表达式都可以用来进行分割
		for (int i = 0; i < strArray.length; i++) {
			Format(strArray[i]);
			// System.out.println(strArray[i]);
		}
	}
	
	// 对字符串进行格式化的函数
	public static void Format(String s) {
		StringBuilder sb = new StringBuilder();// 声明一个StringBui
		char ch[] = s.toCharArray();// 将字符串转换为字符数组
		int len = ch.length;// 数组的长度
		for (int i = 0; i < len; i++) {
			if (ch[i] >= 48 && ch[i] <= 57) {// 判断如果是数字,直接添加,在此处说明不考虑数字的情况
				sb.append(ch[i]);
			} else {	// 判断如果是字母，对字母的情况进行判断
				// 字母不是首位,考虑两种情况,1.它前面是数字,2.它后面是数字
				if ((i - 1) >= 0 && ch[i - 1] >= 48 && ch[i - 1] <= 57) {// 如果它前一位是数字
					sb.append("_");// 添加分隔符
					sb.append((ch[i] + "").toUpperCase());
				} else if (i == 0) {// 字母是首位直接大写
					sb.append(("" + ch[i]).toUpperCase());// 就将其变为大写
				} else {
					sb.append(ch[i]);
				}
				//注意此处的if和上面的if是并列的关系
				if ((i + 1) < len && ch[i + 1] >= 48 && ch[i + 1] <= 57) {// 如果它后一位是数字
					sb.append("_");// 添加分隔符
				}
			}
		}
		System.out.print(sb + " ");
	}
	
	public static void main(String args[]) {
		new FormatString();
	}
}

